/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sunsite.service;

import org.hibernate.exception.DataException;
import org.springframework.mail.MailException;
import sunsite.po.Usr;
import sunsite.vo.UserInfo;

/**
 *
 * @author Administrator
 */
public interface UserService {

    /**
     * 验证用户名/密码
     * @param userId
     * @param password
     * @return 用户基本信息，若不合法则返回null
     * @throws java.lang.Exception
     */
    Usr validate(String userName,String password) throws Exception;
    
    /**
     * 用户注册（已包括Login）
     * @param user
     * @return 1 注册成功；-1 用户信息丢失；
     * @throws java.lang.Exception
     */
    int register(Usr user) throws Exception;
    
    /**
     * 将用户信息写入Session，并更新lastLogin和loginCount
     * @param user
     */
    void Login(Usr user) throws Exception;
    
    /**
     * 将用户信息写入Session，并更新lastLogin和loginCount
     * @param userInfo
     * @throws java.lang.Exception
     */
    void Login(UserInfo userInfo) throws Exception;
    
    /**
     * 返回该用户ID是否已存在
     * @param userName
     * @return 
     * @throws java.lang.Exception
     */
    boolean isUserExisted(String userId) throws Exception;
    
    /**
     * 重新获取密码(涉及邮件通知，暂未实现)
     * @param user
     * @throws java.lang.Exception
     */
    void reSetPassword(Usr user) throws MailException,Exception;
    
    /**
     * 修改密码
     * @param oldPsw
     * @param newPsw
     * @return 0修改成功，-1用户未登录，1旧密码错误，2异常
     */
    int changePassword(String oldPsw, String newPsw) throws Exception;
    
    void delete(String userName) throws DataException;

    Usr getUsrByName(String userName);

    /**
     * 检验用户名/邮箱是否对应
     * @param userName
     * @param email
     * @return 合法邮箱：返回Usr对象；非法邮箱，返回null
     * @throws java.lang.Exception
     */
    Usr validateEmail(String userName,String email) throws Exception;

    void update(Usr user)throws Exception;
}
